#ifndef __WIZ_DATATYPE_GRAPH_FORWARD_DECLARE_HPP__SHANHAOBO_19800429__
#define __WIZ_DATATYPE_GRAPH_FORWARD_DECLARE_HPP__SHANHAOBO_19800429__

#include "../../Base/Type/WizBaseType.hpp"
#include "../../Base/Type/WizBaseInt.hpp"

#include "../Container/WizDataTypeArray.hpp"
#include "../Container/WizDataTypeList.hpp"
#include "../Container/WizDataTypeSet.hpp"

namespace Wiz
{
    /// Directed Graph
    namespace DGraph
    {
        namespace Node
        {
            class Type;
            WIZ_DECLARE(::Wiz::DGraph::Node::Type);

            namespace Array
            {
                typedef ::Wiz::Array<::Wiz::DGraph::Node::Ptr>             Type;
                WIZ_DECLARE(::Wiz::DGraph::Node::Array::Type);
                typedef ::Wiz::DGraph::Node::Array::Type::Iterator         Iterator;
                typedef ::Wiz::DGraph::Node::Array::Type::ConstIterator    ConstIterator;
                typedef ::Wiz::DGraph::Node::Array::Type::ForEach          ForEach;
                typedef ::Wiz::DGraph::Node::Array::Type::ConstForEach     ConstForEach;
            } /// end of namespace Array
            namespace List
            {
                typedef ::Wiz::List<::Wiz::DGraph::Node::Ptr>              Type;
                WIZ_DECLARE(::Wiz::DGraph::Node::List::Type);
                typedef ::Wiz::DGraph::Node::List::Type::Iterator          Iterator;
                typedef ::Wiz::DGraph::Node::List::Type::ConstIterator     ConstIterator;
                typedef ::Wiz::DGraph::Node::List::Type::ForEach           ForEach;
                typedef ::Wiz::DGraph::Node::List::Type::ConstForEach      ConstForEach;
            } /// end of namespace List
            namespace Set
            {
                typedef ::Wiz::Set<::Wiz::DGraph::Node::Ptr>               Type;
                WIZ_DECLARE(::Wiz::DGraph::Node::Set::Type);
                typedef ::Wiz::DGraph::Node::Set::Type::Iterator           Iterator;
                typedef ::Wiz::DGraph::Node::Set::Type::ConstIterator      ConstIterator;
                typedef ::Wiz::DGraph::Node::Set::Type::ForEach            ForEach;
                typedef ::Wiz::DGraph::Node::Set::Type::ConstForEach       ConstForEach;
            } /// end of namespace Set
        } /// end of namespace Node

        namespace Link
        {
            class Type;
            WIZ_DECLARE(::Wiz::DGraph::Link::Type);

            namespace Array
            {
                typedef ::Wiz::Array<::Wiz::DGraph::Link::Ptr>             Type;
                WIZ_DECLARE(::Wiz::DGraph::Link::Array::Type);
                typedef ::Wiz::DGraph::Link::Array::Type::Iterator         Iterator;
                typedef ::Wiz::DGraph::Link::Array::Type::ConstIterator    ConstIterator;
                typedef ::Wiz::DGraph::Link::Array::Type::ForEach          ForEach;
                typedef ::Wiz::DGraph::Link::Array::Type::ConstForEach     ConstForEach;
                typedef ::Wiz::DGraph::Link::Array::Type::ValueType        ValueType;
                typedef ::Wiz::DGraph::Link::Array::Type::ConstValueType   ConstValueType;
            } /// end of namespace Array
            namespace List
            {
                typedef ::Wiz::List<::Wiz::DGraph::Link::Ptr>              Type;
                WIZ_DECLARE(::Wiz::DGraph::Link::List::Type);
                typedef ::Wiz::DGraph::Link::List::Type::Iterator          Iterator;
                typedef ::Wiz::DGraph::Link::List::Type::ConstIterator     ConstIterator;
                typedef ::Wiz::DGraph::Link::List::Type::ForEach           ForEach;
                typedef ::Wiz::DGraph::Link::List::Type::ConstForEach      ConstForEach;
                typedef ::Wiz::DGraph::Link::List::Type::ValueType         ValueType;
                typedef ::Wiz::DGraph::Link::List::Type::ConstValueType    ConstValueType;
            } /// end of namespace List
            namespace Set
            {
                typedef ::Wiz::Set<::Wiz::DGraph::Link::Ptr>               Type;
                WIZ_DECLARE(::Wiz::DGraph::Link::Set::Type);
                typedef ::Wiz::DGraph::Link::Set::Type::Iterator           Iterator;
                typedef ::Wiz::DGraph::Link::Set::Type::ConstIterator      ConstIterator;
                typedef ::Wiz::DGraph::Link::Set::Type::ForEach            ForEach;
                typedef ::Wiz::DGraph::Link::Set::Type::ConstForEach       ConstForEach;
                typedef ::Wiz::DGraph::Link::Set::Type::ValueType          ValueType;
                typedef ::Wiz::DGraph::Link::Set::Type::ConstValueType     ConstValueType;
            } /// end of namespace Set

            namespace Input
            {
                class Type;
                WIZ_DECLARE(::Wiz::DGraph::Link::Input::Type);
                namespace Array
                {
                    typedef ::Wiz::Array<::Wiz::DGraph::Link::Input::Ptr>             Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Input::Array::Type);
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::Iterator         Iterator;
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::ConstIterator    ConstIterator;
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::ForEach          ForEach;
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::ConstForEach     ConstForEach;
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::ValueType        ValueType;
                    typedef ::Wiz::DGraph::Link::Input::Array::Type::ConstValueType   ConstValueType;
                } /// end of namespace Array
                namespace List
                {
                    typedef ::Wiz::List<::Wiz::DGraph::Link::Input::Ptr>              Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Input::List::Type);
                    typedef ::Wiz::DGraph::Link::Input::List::Type::Iterator          Iterator;
                    typedef ::Wiz::DGraph::Link::Input::List::Type::ConstIterator     ConstIterator;
                    typedef ::Wiz::DGraph::Link::Input::List::Type::ForEach           ForEach;
                    typedef ::Wiz::DGraph::Link::Input::List::Type::ConstForEach      ConstForEach;
                    typedef ::Wiz::DGraph::Link::Input::List::Type::ValueType         ValueType;
                    typedef ::Wiz::DGraph::Link::Input::List::Type::ConstValueType    ConstValueType;
                } /// end of namespace List
                namespace Set
                {
                    typedef ::Wiz::Set<::Wiz::DGraph::Link::Input::Ptr>               Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Input::Set::Type);
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::Iterator           Iterator;
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::ConstIterator      ConstIterator;
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::ForEach            ForEach;
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::ConstForEach       ConstForEach;
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::ValueType          ValueType;
                    typedef ::Wiz::DGraph::Link::Input::Set::Type::ConstValueType     ConstValueType;
                } /// end of namespace Set
            } /// end of namespace Input

            namespace Output
            {
                class Type;
                WIZ_DECLARE(::Wiz::DGraph::Link::Output::Type);
                namespace Array
                {
                    typedef ::Wiz::Array<::Wiz::DGraph::Link::Output::Ptr>             Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Output::Array::Type);
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::Iterator         Iterator;
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::ConstIterator    ConstIterator;
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::ForEach          ForEach;
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::ConstForEach     ConstForEach;
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::ValueType        ValueType;
                    typedef ::Wiz::DGraph::Link::Output::Array::Type::ConstValueType   ConstValueType;
                } /// end of namespace Array
                namespace List
                {
                    typedef ::Wiz::List<::Wiz::DGraph::Link::Output::Ptr>              Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Output::List::Type);
                    typedef ::Wiz::DGraph::Link::Output::List::Type::Iterator          Iterator;
                    typedef ::Wiz::DGraph::Link::Output::List::Type::ConstIterator     ConstIterator;
                    typedef ::Wiz::DGraph::Link::Output::List::Type::ForEach           ForEach;
                    typedef ::Wiz::DGraph::Link::Output::List::Type::ConstForEach      ConstForEach;
                    typedef ::Wiz::DGraph::Link::Output::List::Type::ValueType         ValueType;
                    typedef ::Wiz::DGraph::Link::Output::List::Type::ConstValueType    ConstValueType;
                } /// end of namespace List
                namespace Set
                {
                    typedef ::Wiz::Set<::Wiz::DGraph::Link::Output::Ptr>               Type;
                    WIZ_DECLARE(::Wiz::DGraph::Link::Output::Set::Type);
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::Iterator           Iterator;
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::ConstIterator      ConstIterator;
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::ForEach            ForEach;
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::ConstForEach       ConstForEach;
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::ValueType          ValueType;
                    typedef ::Wiz::DGraph::Link::Output::Set::Type::ConstValueType     ConstValueType;
                } /// end of namespace Set
            } /// end of namespace Output
        } /// end of namespace Link
    } /// end of namespace DGraph

    /// Undirected Graph
    namespace UGraph
    {
        namespace Node
        {
            class Type;
            WIZ_DECLARE(::Wiz::UGraph::Node::Type);

            namespace Array
            {
                typedef ::Wiz::Array<::Wiz::UGraph::Node::Ptr>             Type;
                WIZ_DECLARE(::Wiz::UGraph::Node::Array::Type);
                typedef ::Wiz::UGraph::Node::Array::Type::Iterator         Iterator;
                typedef ::Wiz::UGraph::Node::Array::Type::ConstIterator    ConstIterator;
                typedef ::Wiz::UGraph::Node::Array::Type::ForEach          ForEach;
                typedef ::Wiz::UGraph::Node::Array::Type::ConstForEach     ConstForEach;
            } /// end of namespace Array
            namespace List
            {
                typedef ::Wiz::List<::Wiz::UGraph::Node::Ptr>              Type;
                WIZ_DECLARE(::Wiz::UGraph::Node::List::Type);
                typedef ::Wiz::UGraph::Node::List::Type::Iterator          Iterator;
                typedef ::Wiz::UGraph::Node::List::Type::ConstIterator     ConstIterator;
                typedef ::Wiz::UGraph::Node::List::Type::ForEach           ForEach;
                typedef ::Wiz::UGraph::Node::List::Type::ConstForEach      ConstForEach;
            } /// end of namespace List
            namespace Set
            {
                typedef ::Wiz::Set<::Wiz::UGraph::Node::Ptr>               Type;
                WIZ_DECLARE(::Wiz::UGraph::Node::Set::Type);
                typedef ::Wiz::UGraph::Node::Set::Type::Iterator           Iterator;
                typedef ::Wiz::UGraph::Node::Set::Type::ConstIterator      ConstIterator;
                typedef ::Wiz::UGraph::Node::Set::Type::ForEach            ForEach;
                typedef ::Wiz::UGraph::Node::Set::Type::ConstForEach       ConstForEach;
            } /// end of namespace Set
        } /// end of namespace Node

        class Type;
        WIZ_DECLARE(::Wiz::UGraph::Type);
    } /// end of namespace UGraph
} /// end of namespace Wiz

#endif /*__WIZ_DATATYPE_GRAPH_FORWARD_DECLARE_HPP__SHANHAOBO_19800429__*/
